package cn.doitedu.day02.wc

import org.apache.log4j.{Level, Logger}
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @Date 22.3.28
 * @Created by HANGGE
 * @Description
 */
object WordCount {
   //设置控制台打印日志的日志级别
  Logger.getLogger("org").setLevel(Level.ERROR)

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf()
      .setAppName("wordcount")
    val sc = new SparkContext(conf)
    // 加载本地文件   获取一个对象  当成本地集合处理
    val data: RDD[String] = sc.textFile("hdfs://linux01:8020/data/wc/")
     // 获取所有的单词
     val words: RDD[String] = data.flatMap(_.split("\\s+"))
     // 组装成(单词,1)
     val wordAndOne: RDD[(String, Int)] = words.map(x=>{
       (x,1)
     })
    // 统计单词的次数  按照key分组  组内的value进行reduce聚合
    val res: RDD[(String, Int)] = wordAndOne.reduceByKey(_ + _)
    // 按照单词的个数降序排列
    val sorted: RDD[(String, Int)] = res.sortBy(-_._2)
    // 行动算子
    sorted.foreach(println)
    // 程序挂起  方便运行的观察
    Thread.sleep(100000)
    sc.stop()
  }
}
